package com.foreknow.controller;



import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 什么是Session？
 * Session是服务器端的会话技术，服务器在运行的时候可以为每一个用户的数据去创建一个单独的Session对象。
 * Session可为用户浏览器独享。所以当在访问Web资源的时候，可以把各自的数据保存在各自的Session中。
 *
 * Session的核心
 * Session核心类是HttpSession,用于保存会话的数据。
 * getSession()方法：通过此方法可以获取HttpSession对象
 * getSession(boolean b)
 * true:如果在获取Session的时候没有找到匹配的对象，它就会创建一个。
 * false:如果没有找到匹配的对象，不会创建。不建议使用！！！
 *
 * session.getId():得到session的编号
 * session.invalidate():通过此方法可以销毁session对象
 * session.setAttribute("name", "tom");保存数据
 * session.getAttribute("name");获取数据  ${sessionScope.name}
 * session.removeAttribute(name)清除数据  可以在退出登录的时候调用此方法
 *
 * Session的原理：
 * 1.第一次创建一个Session对象，给Session对象分配一个唯一的ID （JSESSIONID）
 *
 * 2.要将JSESSIONID作为cookie的值发送给浏览器来保存
 *
 * 3.在第二次访问的时候，浏览器会携带JSESSIONID的cookie来访问服务器
 *
 * 4.服务器要得到JSESSIONID，在服务器的内存中搜索是否存在对应编号的session对象
 *
 * 5.如果找不到，直接返回该对象
 *
 * 注意：保存在session中数据会被多个servlet/jsp共享，只要浏览器不关闭，那么保存在session中的数据会一直有效
 *
 * @author ttc
 *
 */
public class SessionDemo extends HttpServlet{

	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter out = resp.getWriter();
		//如何获取到session（HttpSession）对象
		HttpSession session = req.getSession();
		//如何向session中保存数据
		session.setAttribute("name", "tom");
		//如何从session中获取数据
		String name = (String)session.getAttribute("name");
		out.println("JSESSIONID:"+session.getId()+"------"+name);


//		Cookie cookie = new Cookie("JSESSIONID",session.getId());
//		cookie.setMaxAge(1*30*24*60*60);//设置cookie的存活时间为20秒
//		resp.addCookie(cookie);



	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doGet(req,resp);
	}

}
